1. 안드로이드 백업 취약점
1.1 안드로이드 백업
클라우드 백업
먼 옛날 안드로이드는 구글 클라우드에 사용자 데이터와 애플리케이션 데이터를 저장하는 기능을 제공하였습나다. 이후 공장 초기화나 시스템 복구가 필요할 때 백업된 데이터를 동기화 하여 기존 데이터를 복원할 수 있게 하기 위함입니다.
PC백업
안드로이드 4.0으로 업데이트 되면서 백업 데이터를 사용자 PC에 저장할 수 있게 해주는 로컬백업을 지원하게 되었습니다. 사용자는 전체 백업을 통해 설치된 애플리케이션의 APK, 데이터, 저장소 등의 파일을 USB를 이용하여 PC에 저장할 수 있게 되었습니다.
1.2 백업 취약점
소개
애플리케이션 데이터의 백업이 가능할 경우, 저장된 파일이 유출될 가능성도 있으므로 보안상 취약할 수 있습니다.
진단
➡️ AndroidManifest.xml 에서 백업이 허용되어 있는지 확인합니다.
2. 실습
2.1 백업 취약점 확인
- 해당 애플리케이션은 취약한 앱으로 소개된
insecurebankv2
입니다.
- AndroidManifest.xml에서
allowBackup="true"
로 되어 있기 때문에 백업이 가능합니다.
- 안드로이드 기본값은 백업 옵션이
true로
설정되어 있지 않다면 패키지의 데이터가 추출되지 않습니다.
2.2 어플리케이션 백업 진행
➡️ adb는
전체 백업
과 특정 애플리케이션
백업을 지원합니다.# 전체 백업 adb backup -all -apk -shared -system -f <저장파일명.ab> # 특정 애플리케이션 백업 adb backup <패키지명> -f <저장파일명.ab>
➡️ Insecurevankv2 앱을 백업해 보도록 하겠습니다.
# cmd adb backup com.android.insecurebankv2 -f insecurebankBackup.ab
- Back up my data를 누르면 백업을 시작합니다.
- 데이터가
*.ab
포멧으로 백업되게 됩니다.
- 백업 파일은
압축된 형식의 tar 파일로
백업 정보를 담은 Manifest파일과 백업 데이터가 포함됩니다.
- 파일 자체는
deflate 알고리즘으로 압축
되어 있습니다.
그럼 압축 해제는 어떻게 하나요?
대략 세가지 방법이 존재합니다.
- openssl의 zlib을 이용하여 압축 해제 (tar파일)
- python 으로 zlib을 import하여 tar 파일로 변환합니다.
- abe.jar 사용하여 언패킹합니다.
➡️ abe.jar을 사용한 unpack
- abe.jar 링크
- unpack
java -jar abe(backup_unpack).jar unpack ..\..\insecurebankBackup.ab insecurebank.tar
➡️ 아카이브에 포함된 리스트 별도 저장
tar -tf insecurebank.tar > insecurebankv2.list
- 안드로이드는 백업 복원 과정에서 처음 리스트 그대로 인식하도록 되어 있습니다.
- 리스트를 텍스트로 저장해 놓고 복원 과정을 진행하면서 처음 리스트 그대로 아카이브를 만들어야 합니다.
- 백업된 리스트
apps/com.android.insecurebankv2/_manifest apps/com.android.insecurebankv2/r/app_textures apps/com.android.insecurebankv2/r/app_webview apps/com.android.insecurebankv2/r/app_webview/BrowserMetrics-spare.pma apps/com.android.insecurebankv2/r/app_webview/Default apps/com.android.insecurebankv2/r/app_webview/Default/blob_storage apps/com.android.insecurebankv2/r/app_webview/Default/blob_storage/03db73b7-3674-4dd0-a2aa-675f16a5b1be apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/CURRENT apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/000003.log apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/MANIFEST-000001 apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/LOCK apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/LOG apps/com.android.insecurebankv2/r/app_webview/Default/Web Data-journal apps/com.android.insecurebankv2/r/app_webview/Default/Web Data apps/com.android.insecurebankv2/r/app_webview/pref_store apps/com.android.insecurebankv2/r/app_webview/webview_data.lock apps/com.android.insecurebankv2/r/app_webview/variations_stamp apps/com.android.insecurebankv2/r/app_webview/variations_seed_new apps/com.android.insecurebankv2/db/mydb-journal apps/com.android.insecurebankv2/db/mydb apps/com.android.insecurebankv2/sp/WebViewChromiumPrefs.xml apps/com.android.insecurebankv2/sp/mySharedPreferences.xml apps/com.android.insecurebankv2/sp/com.android.insecurebankv2_preferences.xml
2.3 백업된 데이터 변조
백업된 데이터는 언패킹 작업을 통해 조회가 가능하고, 수정할 수 있습니다. 여기서 해당 데이터를 변조하여 복원 작업을 수행할 수 있다면, 주요 정보를 조작할 수 있는 취약점이 존재합니다.
➡️ 예시로 언패킹한 tar 파일중 서버의 정보가 담겨있는
preferences.xml
파일을 변조해 보겠습니다.※ 변조 전
※ 변조 후
2.4 패킹 후 복원
➡️ 패킹 작업 이전, 앞서 만들어놨던 리스트를 기반으로 새로운 tar 파일을 생성합니다.
C:\Users\silmu\Desktop\apk>tar -cvf new.tar -P --files-from=insecurebankv2.list
➡️ abe.jar 을 이용하여 다시
new.tar
을 ab
파일로 패킹합니다.java -jar "..\분석툴\모바일\abe(backup_unpack).jar" pack new.tar insecurebank_new.ab
➡️
adb restore <ab파일>
명령어를 사용하여 백업 작업을 수행합니다.해당 과정으로 권한 상승 및 데이터 접근 조작이 아닌
백업만을 이용하여 어플리케이션의 주요 데이터를 변조할 수 있었습니다.
3. 대응방안
- 백업을 가능하게 하는
Androidmanifest
부분의allowBackup
부분을 삭제하거나false
로 변경하여야 합니다.